using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Collections;
using System.Collections.Specialized;
using System.Collections.Generic;
using Novapangeia.Dominio;

namespace Novapangeia.Repositorio
{	
	public partial class RepositorioRelatoriCombate
	{	   
		
		private ISqlHelper sqlHelper;
		
		public  RepositorioRelatoriCombate(ISqlHelper _sqlHelper)
        {
            if (_sqlHelper == null)
                sqlHelper = new SqlHelper();
            else
                sqlHelper = _sqlHelper;
        }
		
		#region Parameters
		public static class Parameters
		{
			public static MySqlParameter Id
			{
				get
				{
					return new MySqlParameter("p_Id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Usuario_atacante_id
			{
				get
				{
					return new MySqlParameter("p_Usuario_atacante_id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Usuario_atacado_id
			{
				get
				{
					return new MySqlParameter("p_Usuario_atacado_id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Mensagem_relatorio
			{
				get
				{
					return new MySqlParameter("p_Mensagem_relatorio", MySqlDbType.VarChar, 1024);
				}
			}
			
			public static MySqlParameter Atacante_venceu
			{
				get
				{
					return new MySqlParameter("p_Atacante_venceu", MySqlDbType.Byte, 0);
				}
			}
			
		}
		#endregion		
		
		//=================================================================
		//  Carrega todos os registros do banco de dados
		//=================================================================
		public List<Relatorio_combate> listarRelatorios() 
		{
			string sql = @"SELECT id, usuario_atacante_id, usuario_atacado_id, mensagem_relatorio, atacante_venceu FROM relatorio_combate";
					
			List<Relatorio_combate> listaRelatorios = new List<Relatorio_combate>();
			
			MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql);
			
			Relatorio_combate relatorio;
			
			while (reader.Read())
            {
                relatorio = preencherRelatorio(reader);
				listaRelatorios.Add(relatorio);
            }

            reader.Close();
			
			return listaRelatorios;
		}

        //=================================================================
        //  Carrega todos os registros do banco de dados
        //=================================================================
        public List<Relatorio_combate> listarRelatoriosPorUsuarioId(Int32 usuarioId)
        {
            string sql = @"SELECT id, usuario_atacante_id, usuario_atacado_id, mensagem_relatorio, atacante_venceu FROM relatorio_combate
                           WHERE usuario_atacante_id = @p_usuarioId OR usuario_atacado_id = @p_usuarioId";

            MySqlParameter p = new MySqlParameter("p_usuarioId", MySqlDbType.Int32);
            p.Value = usuarioId;

            List<Relatorio_combate> listaRelatorios = new List<Relatorio_combate>();

            MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql, new MySqlParameter[] { p });

            Relatorio_combate relatorio;

            while (reader.Read())
            {
                relatorio = preencherRelatorio(reader);
                listaRelatorios.Add(relatorio);
            }

            reader.Close();

            return listaRelatorios;
        }
	
		//=================================================================
		//  Carrega apenas um registro, buscado pela chave primária
		//=================================================================
		public Relatorio_combate ConsultarRelatorioPeloId(uint Id)
		{			
			MySqlParameter p;
			p = Parameters.Id;
			p.Value = Id;
		
			MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.StoredProcedure, "proc_relatorio_combateLoadByPrimaryKey", new MySqlParameter[] { p } , CommandBehavior.SingleRow);
			
			Relatorio_combate entity = new Relatorio_combate();
			
			if(reader.HasRows)
            {
				reader.Read();
				entity = preencherRelatorio(reader);
            }
            else
            {
                entity = null;
            }

            reader.Close();
			
			return entity;
		}
		
        private Relatorio_combate preencherRelatorio(MySqlDataReader  reader)
        {
            Relatorio_combate newEntity = new Relatorio_combate();
			
			newEntity.Id = reader.GetInt32("Id");

            newEntity.UsuarioAtacanteId = reader.GetInt32("Usuario_atacante_id");

            newEntity.UsuarioAtacadoId = reader.GetInt32("Usuario_atacado_id");

			newEntity.MensagemRelatorio = reader.GetString("Mensagem_relatorio");

            newEntity.AtacanteVenceu = reader.GetBoolean("Atacante_venceu");


            return newEntity;
        }
	//to do: metodo dando pau!!!
		public int inserirRelatorio(Relatorio_combate relatorio)
		{
            string sql = @"INSERT
	                    INTO relatorio_combate
	                    (
		                    usuario_atacante_id,
		                    usuario_atacado_id,
		                    mensagem_relatorio,
		                    atacante_venceu
	                    )
	                    VALUES
	                    (
		                    @p_usuario_atacante_id,
		                    @p_usuario_atacado_id,
		                    @p_mensagem_relatorio,
		                    @p_atacante_venceu
	                    );";

			List<MySqlParameter> parameters = new List<MySqlParameter>();
			
			MySqlParameter p;
			
			p = Parameters.Id;
			p.Direction = ParameterDirection.Output;
			parameters.Add(p);

			p = Parameters.Usuario_atacante_id;
			p.Value = relatorio.UsuarioAtacanteId;
			parameters.Add(p);

			p = Parameters.Usuario_atacado_id;
			p.Value = relatorio.UsuarioAtacadoId;
			parameters.Add(p);

			p = Parameters.Mensagem_relatorio;
			p.Value = relatorio.MensagemRelatorio;
			parameters.Add(p);

			p = Parameters.Atacante_venceu;
			p.Value = relatorio.AtacanteVenceu;
			parameters.Add(p);


			MySqlParameterCollection returnParamsQuery = sqlHelper.ExecuteSqlWithOutputParams(CommandType.Text, sql, parameters.ToArray());
			
			return Convert.ToInt32(returnParamsQuery["p_Id"].Value);
		}
	
		public bool Delete(Relatorio_combate entity)
		{
		    string sql = @"DELETE
	                        FROM relatorio_combate
	                        WHERE
		                        id = @p_id;";

			MySqlParameter p;
			p = Parameters.Id;
			p.Value = entity.Id;
  
			return sqlHelper.ExecuteSql(CommandType.Text, sql, new MySqlParameter[] { p });	
		}
		
	}
}
